iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0

如何處理 API 錯誤?
a. 錯誤檢測
狀態碼檢查:檢查 HTTP 響應狀態碼,以判斷請求是否成功。
響應內容解析:解析 API 返回的錯誤信息,例如錯誤訊息、錯誤代碼等。
b. 錯誤處理
重試機制:對於暫時性錯誤(如 502、503),可以實現自動重試機制。
用戶反饋:向用戶提供明確的錯誤訊息,說明問題並提供可能的解決方案。
備援方案:在主要 API 失敗時,使用備援服務或降級功能。
c. 錯誤記錄
日誌記錄:詳細記錄錯誤資訊,包括時間、錯誤代碼、請求參數等,以便後續調試。
監控與告警:設置監控系統,實時監控 API 錯誤率並在異常時發送告警。
d. 版本控制與兼容性
API 版本管理:保持 API 版本的穩定,避免頻繁變更導致的兼容性問題。
向後兼容性:在更新 API 時,盡量保持向後兼容,避免影響現有用戶。


常見的 API 錯誤代碼與解釋
以下是一些常見的 HTTP 狀態碼及其在 API 錯誤處理中的含義:

客戶端錯誤(4xx)

  • 400 Bad Request(錯誤的請求)
    原因:請求格式錯誤,參數缺失或無效。
    處理:檢查並修正請求參數和格式。

  • 401 Unauthorized(未授權)
    原因:缺少有效的認證憑證(如 API 金鑰、Token)。
    處理:確保提供正確的認證資訊,可能需要重新登錄或獲取新 Token。

  • 403 Forbidden(禁止訪問)
    原因:用戶無權訪問該資源,即使已經認證。
    處理:檢查用戶權限,確保有權訪問該資源。

  • 404 Not Found(未找到)
    原因:請求的資源不存在。
    處理:確認請求的 URL 和資源是否正確。

  • 405 Method Not Allowed(方法不允許)
    原因:使用了不支持的 HTTP 方法(如對某端點使用 POST 而只支持 GET)。
    處理:檢查並使用正確的 HTTP 方法。

  • 429 Too Many Requests(請求過多)
    原因:超出 API 的速率限制。
    處理:實施退避策略(如指數退避),並確保遵守 API 的速率限制政策。

服務器錯誤(5xx)

  • 500 Internal Server Error(內部伺服器錯誤)
    原因:服務器遇到未預期的錯誤。
    處理:通常需要等待服務器恢復,並可聯繫 API 提供者。

  • 502 Bad Gateway(錯誤的網關)
    原因:作為網關或代理的服務器從上游服務器收到無效響應。
    處理:重試請求,若問題持續,聯繫服務器管理員。

  • 503 Service Unavailable(服務不可用)
    原因:服務器暫時無法處理請求,可能因為過載或維護。
    處理:實施重試機制,並在重試前等待一段時間。

  • 504 Gateway Timeout(網關超時)
    原因:作為網關或代理的服務器未能在預定時間內從上游服務器獲取響應。
    處理:重試請求,檢查網絡連接或服務器狀態。
    其他有用的狀態碼


如何在 Postman 中處理錯誤響應
查看響應狀態碼和內容

  1. 發送請求:在 Postman 中配置好請求的 URL、方法和參數後,點擊「Send」發送請求。
  2. 查看狀態碼:在響應面板上方,可以看到 HTTP 狀態碼。例如,200 表示成功,404 表示資源未找到。
  3. 查看響應體:切換到「Body」選項卡,查看 API 返回的詳細錯誤信息,通常以 JSON 或 XML 格式呈現。

使用測試腳本自動檢測錯誤
Postman 支持在請求後運行 JavaScript 測試腳本,以自動化檢測和處理錯誤。

  1. 編寫測試腳本:
    點擊「Tests」選項卡,編寫腳本來檢查響應狀態碼和內容。例如:
// 檢查狀態碼是否為 200
pm.test("狀態碼為 200", function () {
    pm.response.to.have.status(200);
});

// 檢查響應體中是否包含特定錯誤訊息
pm.test("檢查錯誤訊息", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.error).to.eql("Invalid API Key");
});
  1. 運行測試:發送請求後,Postman 會自動運行測試腳本並顯示結果。如果測試失敗,表示存在錯誤,並顯示相關信息。

使用環境變數和全局變數處理錯誤
可以利用 Postman 的環境變數和全局變數來動態處理錯誤,例如在遇到 401 Unauthorized 時,自動刷新 Token。

  1. 設置環境變數:在 Postman 中設置如 {{token}} 的環境變數,用於存儲和使用認證 Token。

編寫測試腳本處理錯誤:

if (pm.response.code === 401) {
    // 發送刷新 Token 的請求
    pm.sendRequest({
        url: 'https://api.example.com/refresh-token',
        method: 'POST',
        header: {
            'Content-Type': 'application/json'
        },
        body: {
            mode: 'raw',
            raw: JSON.stringify({ refreshToken: pm.environment.get("refreshToken") })
        }
    }, function (err, res) {
        if (res.code === 200) {
            var newToken = res.json().token;
            // 更新環境變數
            pm.environment.set("token", newToken);
            // 重新發送原始請求
            postman.setNextRequest(pm.info.requestName);
        } else {
            console.log("刷新 Token 失敗");
        }
    });
}

使用集合級別的前置和後置腳本
在 Postman 集合中,可以設置前置(Pre-request)和後置(Tests)腳本,以在每個請求前後自動處理錯誤。例如,統一處理 500 錯誤,並記錄到日誌中。

  1. 設置後置腳本:

在集合的「Tests」選項卡中,添加以下腳本:

if (pm.response.code >= 500) {
    console.log("服務器錯誤:", pm.response.code, pm.response.text());
    // 可選:發送通知或記錄到外部系統
}

2.運行集合測試:使用 Postman 的「Collection Runner」運行整個集合,所有的錯誤都會被自動處理和記錄。

使用 Postman 的自動化和集成工具
Postman 支持與 CI/CD 工具集成,如 Jenkins、GitLab CI 等,能夠在自動化測試流程中處理和報告 API 錯誤。

  1. 導出集合:將 Postman 集合導出為 JSON 文件。
  2. 集成到 CI/CD 流程:在 CI/CD 腳本中使用 Newman(Postman 的命令行工具)運行集合測試。
newman run your-collection.json -e your-environment.json
  1. 分析結果:根據測試結果,自動化流程可以決定是否通過或失敗,並生成錯誤報告。

透過以上方法,可以有效地處理 API 錯誤,提升應用的穩定性和用戶體驗。無論是在開發階段還是運行階段,妥善的錯誤處理策略都是必不可少的。


上一篇
DAY19. API 測試的最佳實踐
下一篇
DAY21. API 版本管理
系列文
API 101:從基礎認識到應用的全方位指南-Swagger/Postman30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言